package satk.beans.persona;

import java.io.Serializable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import satk.beans.interfaces.IntControlBeansEdit;
import satk.objetos.Persona;

/**
 * <h3>EditInstitucionBeans.java</h3>
 * <div><em>Fecha de creación: 26/05/2011, 10:43:26 PM.</em></div>
 * <p></p>
 * @author Sergio Flores Genis <sf.cancun@gmail.com>
 */
@ManagedBean
@ViewScoped
public class EditPersonaBeans
        implements IntControlBeansEdit<Persona>, Serializable {

    private Persona editPersona = null;
    private Persona oldPersona = null;

    public EditPersonaBeans() {
        this.editPersona = new Persona();
        this.oldPersona = (Persona) this.editPersona.clon();
    }

    @Override
    public Persona getEdit() {
        return editPersona;
    }

    @Override
    public Persona getOld() {
        return oldPersona;
    }

    @Override
    public void startEdit(Persona o) {
        cancelEdit();
        this.editPersona = o;
        this.oldPersona = (Persona) o.clon();
    }

    @Override
    public void cancelEdit() {
        this.editPersona = new Persona();
        this.oldPersona = (Persona) this.editPersona.clon();
    }

    @Override
    public String edit() {
        java.util.List<java.lang.Throwable> lista = editPersona.valida();
        if (!lista.isEmpty()) {
            String summary = satk.tools.GeneralEx.excepcionListThrowable(lista);
            throw new javax.faces.validator.ValidatorException(new FacesMessage(summary));
        }
        try {
            new satk.database.ManagerPersona().update(this.oldPersona, this.editPersona);
        } catch (java.sql.SQLIntegrityConstraintViolationException ex) {
            Logger.getLogger(EditPersonaBeans.class.getName()).log(Level.SEVERE,
                    "Conflicto de integridad de datos en edición de competidor", ex);
            if (ex.getErrorCode() == 1062) {
                throw new javax.faces.event.AbortProcessingException(
                        "Ocurio un conflucto en la integridad de datos.");
            } else {
                throw new javax.faces.event.AbortProcessingException(ex.getErrorCode()
                        + " - Se violo la integridad de datos <br/>." + ex.getMessage());
            }
        } catch (java.sql.SQLException ex) {
            Logger.getLogger(EditPersonaBeans.class.getName()).log(Level.SEVERE,
                    "Error al actualizar la persona", ex);
            throw new javax.faces.event.AbortProcessingException(ex.getErrorCode() + ex.getMessage());
        }
        return null;
    }
}
